package fr.kyvos.optimization;

import java.io.IOException;

public class RecuitSimuleTestThread extends AlgoTestThread {
	protected int[] nb_essais_av_chgt_range;
	protected double[] t0_range;
	protected double[] facteur_chgt_range;
	
	public RecuitSimuleTestThread (KnapSackProblem problem) {
		super(problem);
		nb_essais_av_chgt_range = new int[]{};
		t0_range = new double[]{};
		facteur_chgt_range = new double[]{};
	}
	
	public void change_config(int type_solution_init, int[] nb_iterations_range, int nb_iteration_range_pas, int[] nb_essais_av_chgt_range, double[] t0_range, double[] facteur_chgt_range){
		super.change_config(nb_essais_av_chgt_range.length, type_solution_init, nb_iterations_range, nb_iteration_range_pas);
		this.nb_essais_av_chgt_range = nb_essais_av_chgt_range;
		this.t0_range = t0_range;
		this.facteur_chgt_range = facteur_chgt_range;
	}
	
	@Override
	protected void write_file_header() throws IOException {
		// TODO Auto-generated method stub
		super.write_file_header();
		write_in_file(";nombre de changements de temperature;");
		write_in_file("temperature initiale;");
		write_in_file("facteur de changement\r\n");
	}
	
	@Override
	protected void test(int no_combinaison, int nb_iterations) {
		try {
					System.out.println("test actuel : nb_iterations_range : "+nb_iterations+" - nb_chgt_temperature : "+(nb_iterations / nb_essais_av_chgt_range[no_combinaison])+" - t0_range : "+t0_range[no_combinaison]+" - facteur_chgt_range : "+facteur_chgt_range[no_combinaison]);
					problem.initFirstSolution(type_solution_init);
					//problem.RecuitSimule(800, 150, 100, 0.99);
					problem.RecuitSimule(nb_iterations, nb_essais_av_chgt_range[no_combinaison], t0_range[no_combinaison], facteur_chgt_range[no_combinaison]);
					double meilleur_fitness = problem.mBestSolution.getFitness();
					
					//nb_iterations / nb_essais_av_chgt_range;
					
					String test_line = ""+(no_combinaison+1)+";"+nb_iterations+";"+meilleur_fitness+";"+(nb_iterations / nb_essais_av_chgt_range[no_combinaison])+";"+t0_range[no_combinaison]+";"+facteur_chgt_range[no_combinaison]+"\r\n";
					
						write_in_file(test_line);
					
					
					//System.out.println("RECUIT SIMULE - Best des BEST Solution: "+problem.mBestSolution.toString());
				
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
